﻿/* dk2Repository - Copyright (C) 2011 Daniel Kuczewski http://www.dk2.de/

 * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */

using System.Collections.Generic;
using System.Data;

namespace dk2Repository.QueryBuilder
{
    internal abstract class CreateTableBuilder : SqlBuilderBase
    {
        private readonly List<Column> _columns;

        public bool CreateIfNotExists { get; set; }

        protected struct Column
        {
            public Column(string name, DbType type, bool nullable, uint length, bool pk, bool autoinc)
            {
                Name = name;
                Type = type;
                Length = length;
                Pk = pk;
                Autoinc = autoinc;
                Nullable = nullable;
            }

            public string Name;
            public DbType Type;
            public uint Length;
            public bool Pk;
            public bool Autoinc;
            public bool Nullable;

        }


        protected Column[] Columns { get { return _columns.ToArray(); } }

        protected CreateTableBuilder()
        {
            _columns = new List<Column>();
        }

        public void AddColumn(string columnname, DbType type, bool nullable)
        {
            _columns.Add(new Column(columnname, type, nullable, 0, false, false));
        }

        public void AddColumn(string columnname, DbType type, bool nullable, uint length)
        {
            _columns.Add(new Column(columnname, type, nullable, length, false, false));
        }

        public void AddColumn(string columnname, DbType type, bool nullable, uint length, bool pk, bool autoinc)
        {
            _columns.Add(new Column(columnname, type, nullable, length, pk, autoinc));
        }


        public abstract override string CreateSql();
    }
}